package com.fary.controller;

import com.fary.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

/**
 * 测试restTemplate
 * 除了 get 和 post 对应的方法之外，RestTemplate 还提供了 put、delete 等操作方法，还有一个比较实用的就是 exchange 方法。
 * exchange 可以执行 get、post、put、delete 这 4 种请求方式。
 */
@RestController
public class RestTemplateController {

    @Qualifier("RestTemplate")
    @Autowired
    private RestTemplate restTemplate;

    @Qualifier("RestTemplate1")
    @Autowired
    private RestTemplate restTemplate1;

    @GetMapping("/article/callHello")
    public String callHello() {
        return restTemplate.getForObject("http://localhost:8081/user/hello", String.class);
    }

    /**
     * restTemplate需要加上@LoadBalanced
     */
    @GetMapping("/article/callHello2")
    public String callHello2() {
        return restTemplate1.getForObject("http://eureka-producer/user/hello", String.class);
    }

    @GetMapping("/user/callGetUser")
    public User callGetUser() {
        return restTemplate.getForObject("http://localhost:8081/user/data?name=fangyuan", User.class);
    }

    @GetMapping("/call/dataEntity")
    public User callGetUser(@RequestParam("name") String name) {
        ResponseEntity<User> responseEntity = restTemplate.getForEntity("http://localhost:8081/user/data?name=" + name, User.class);
        if (responseEntity.getStatusCodeValue() == 200) {
            return responseEntity.getBody();
        }
        return null;
    }

    @GetMapping("/user/callGetUserName")
    public String callGetUserName() {
        return restTemplate.getForObject("http://localhost:8081/user/data/zhangsan", String.class);
    }

    @PostMapping("/user/callUpdateUser")
    public String callUpdateUser(@RequestBody User user) {
        return restTemplate.getForObject("http://localhost:8081/user/data/", String.class, user);
    }


}
